home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dr. Windows 3
/
dr win3.zip
/
dr win3
/
UTILITY1
/
MSWSRC35.ZIP
/
MYCOMBO.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1993-10-12
|
3KB
|
92 lines
// ObjectWindows - (C) Copyright 1992 by Borland International
/* -------------------------------------------------------
MYCOMBO.CPP
Defines type TMyComboBox. This is a replacement for TComboBox which
differs solely in that it uses a TNSCollection as part of its
transferbuffer instead of an Array.
Note that if you actually intend to stream this class, you will
need to define the build, read, write, etc. needed, since this
will class will otherwise use those inherited from TComboBox.
-------------------------------------------------------- */
#include <owl.h>
#include "mycombo.h"
/* Constructor for a TMyComboBoxData object. Initializes Strings and
Selection. */
TMyComboBoxData::TMyComboBoxData()
{
Strings = new TNSCollection(5, 5);
Selection = NULL;
}
/* Destructor for TMyComboBoxData. Deletes Strings and Selection. */
TMyComboBoxData::~TMyComboBoxData()
{
if ( Strings )
delete Strings;
if ( Selection )
delete Selection;
}
/* Adds the supplied string to the Strings Array and copies it into
Selection if IsSelected is TRUE. */
void TMyComboBoxData::AddString(Pchar AString, BOOL IsSelected)
{
Strings->insert(strdup(AString));
if ( IsSelected )
{
if (AString != Selection)
{
if (Selection)
delete Selection;
Selection = strdup(AString);
}
}
}
static void DoAddForCB(Pvoid AString, Pvoid AComboBox)
{
if (AString)
((PTMyComboBox)AComboBox)->AddString((Pchar)AString);
}
/* Transfers the items and selection of the combo box to or from a
transfer buffer if TF_SETDATA or TF_GETDATA, repectively, is passed
as the TransferFlag. DataPtr should point to a PTMyComboBoxData
(i.e. it should be a pointer to a pointer to a TMyComboBoxData)
which points to the data to be transferred.
Transfer returns the size of PTMyComboBox (the pointer not the
object). To retrieve the size without transferring data, pass
TF_SIZEDATA as the TransferFlag. */
WORD TMyComboBox::Transfer(Pvoid DataPtr, WORD TransferFlag)
{
PTMyComboBoxData ComboBoxData = *(PTMyComboBoxData _FAR *)DataPtr;
if ( TransferFlag == TF_GETDATA )
{
int StringSize = GetWindowTextLength(HWindow) + 1;
if (!StringSize)
StringSize = 80;
if ( ComboBoxData->Selection )
delete ComboBoxData->Selection;
ComboBoxData->Selection= new char[StringSize];
GetWindowText(HWindow, ComboBoxData->Selection, StringSize);
}
else
if ( TransferFlag == TF_SETDATA )
{
ClearList();
ComboBoxData->Strings->forEach(DoAddForCB, this);
int SelIndex = FindExactString(ComboBoxData->Selection, -1);
if ( SelIndex > -1 )
SetSelIndex(SelIndex);
SetWindowText(HWindow, ComboBoxData->Selection);
}
return sizeof(PTMyComboBoxData);
}